package com.spsa.negocio.servicios;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import com.spsa.excepciones.ActualizarDatosException;
import com.spsa.excepciones.EliminarDatosException;
import com.spsa.excepciones.GuardarDatosException;
import com.spsa.excepciones.RecuperarDatosException;
import com.spsa.excepciones.ServicioException;
import com.spsa.negocio.utilidades.SingletonDatos;
import com.spsa.persistencia.dao.InterfazDao;
import com.spsa.persistencia.dao.TiendaDao;
import com.spsa.persistencia.entidades.Interfaz;
import com.spsa.persistencia.entidades.Tienda;

@Stateless
public class ServicioTiendas {
	@EJB
	private TiendaDao tiendaDao;
	@EJB
	private InterfazDao interfazDao;
	@EJB
	private SingletonDatos singletonDatos;
	
	public void registrar(Tienda tienda) throws ServicioException{
		try {
			if(tienda.getInterfaces().size() == 0)
				throw new ServicioException("Toda tienda debe tener al menos 1 interfaz asociada");
			
			if(tiendaDao.existe(tienda.getCodigo()))
				throw new ServicioException("Ya existe una tienda registrada con ese codigo");

			tiendaDao.guardar(tienda);
			singletonDatos.cargarDatosTiendas();
		}
		catch(GuardarDatosException e) {
			throw new ServicioException("No se pudo registrar la Tienda");
		}
		catch(RecuperarDatosException e) {
			throw new ServicioException("No se pudo conectar a la BD");
		}
	}

	public void actualizar(Tienda tienda) throws ServicioException{
		try {
			if(!tiendaDao.existe(tienda.getCodigo()))
				throw new ServicioException("La tienda que desea actualizar no esta registrada en la BD");
			
			tiendaDao.actualizar(tienda);
			singletonDatos.cargarDatosTiendas();
		}
		catch(ActualizarDatosException e) {
			throw new ServicioException("No se pudo actualizar los datos de la Tienda");
		}
		catch(RecuperarDatosException e) {
			throw new ServicioException("No se pudo conectar a la BD");
		}
	}

	public void eliminar(Tienda tienda) throws ServicioException {
		try {
			List<Interfaz> interfaces = new ArrayList<Interfaz>(tienda.getInterfaces());
			
			for(int i = 0; i < interfaces.size(); i ++) {
				interfaces.get(i).getTiendas().remove(tienda);
				interfazDao.actualizar(interfaces.get(i));
			}
			
			tiendaDao.eliminar(tienda);
			singletonDatos.cargarDatosTiendas();
		}
		catch(EliminarDatosException e) {
			throw new ServicioException("No se pudo eliminar la tienda");
		}
		catch(ActualizarDatosException e) {
			throw new ServicioException("No se pudo eliminar la tienda");
		}
	}
}
